package com.itheima.controller;

import com.itheima.annotation.MyLog;
import com.itheima.entity.Emp;
import com.itheima.entity.PageBean;
import com.itheima.entity.PageQueryBean;
import com.itheima.entity.Result;
import com.itheima.service.EmpService;
import com.itheima.util.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
    @Autowired
    EmpService empService;

    /*
     *  分页查询员工列表
     *
     * */
    /*@GetMapping
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize) {
        // 1.接受请求参数：key=value格式的请求参数，散列的方式接受/pojo实体对象/Map对象
        // 2.调用业务层实现查询员工列表功能
        PageBean pageBean = empService.pageQuery(page, pageSize);
        //3.封装并返回查询结果
        return Result.success(pageBean);//code=1,msg=success,data=[pagebean:total/row]*/
    @GetMapping
    public Result page(HttpServletRequest request, PageQueryBean pageQueryBean) {
        //0.校验用户身份（判断其是否已经登录了？判断是否携带了正确的令牌）
        // 0.1获取请求头中的令牌
        String token = request.getHeader("Token");

        //0.2 判断是否携带了令牌
        if (token == null) {
            return Result.error("NOT_LOGIN");
        }
        //0.3 校验令牌是否正确
        try {
            JwtUtils.parseJWT(token);
        } catch (Exception e) {
            //校验失败，jwt无效
            return Result.error("NOT_LOGIN");
        }


        // 1.接受请求参数：key=value格式的请求参数，散列的方式接受/pojo实体对象/Map对象
        // 2.调用业务层实现查询员工列表功能
        PageBean pageBean = empService.pageQuery(pageQueryBean);
        //3.封装并返回查询结果
        return Result.success(pageBean);//code=1,msg=success,data=[pagebean:total/row]
    }

    /*
     * 批量删除员工
     * */
    @DeleteMapping("/{ids}")
    public Result deleteBatch(@PathVariable List<Integer> ids) {
        //1. 接受请求参数：请求路径中的参数path，@PathVariable
        log.info("批量删除，ids={}", ids);
        //2. 调用业务层，实现批量删除员工
        empService.delete(ids);
        //3.封装并返回处理结果
        return Result.success();
    }

    /*
     * 添加员工
     *
     * */
    @PostMapping("")
    public Result add(@RequestBody Emp emp) {
        // 1.接受请求参数
        log.info("添加员工：{}", emp);
        //2.调用业务层
        empService.addEmp(emp);
        //3.封装
        return Result.success();
    }

    /*
     * 根据id
     * */
    @GetMapping("/{id}")
    public Result queryOne(@PathVariable Integer id) {
        Emp emp = empService.queryOne(id);

        return Result.success(emp);
    }

    /*
     * 更新
     * */
    @MyLog
    @PutMapping()
    public Result update(@RequestBody Emp emp) {
        empService.update(emp);

        return Result.success();
    }
}
